package com.docking.heylo.service;


import com.docking.heylo.dao.entity.PersonalInformation;
import com.docking.heylo.dao.entity.UserApertureSet;
import com.docking.heylo.pojo.SimpleUser;
import com.docking.heylo.web.dto.*;
import com.docking.heylo.web.vo.LoginResult;

import java.util.List;
import java.util.Map;

public interface IUserService {


    /***
     * 发送注册验证码
     *
     * @param enrollmentDto
     */
    void sendEnrollmentVerCode(EnrollmentDto enrollmentDto);

    /***
     * 注册成功返回用户ID，失败抛出异常
     *
     * @param enrollmentDto
     * @return
     */
    LoginResult enrollment(EnrollmentDto enrollmentDto);

    /***
     * 登录
     *
     * @param enrollmentDto
     * @return
     */
    LoginResult login(EnrollmentDto enrollmentDto);

    /***
     * 创建用户资料
     *
     * @param userArchive
     */
    void createArchive(UserArchive userArchive);

    /***
     * 设置密码，仅在创建帐号后能使用
     *
     * @param enrollmentDto
     */
    void setPassword(EnrollmentDto enrollmentDto);

    /***
     * 获取登录用户信息
     *
     * @return
     */
    LoginResult information();

    /***
     * 修改信息
     *
     * @param pi
     */
    void saveInformation(PersonalInformation pi);

    /***
     * 同步定位
     *
     * @param pi
     */
    void syncPositioning(PersonalInformation pi);


    SimpleUser userForId(int userId);

    /***
     * 申请成为大V
     */
    void applyBigV();

    /**
     * 查看他人ID
     *
     * @param userId
     * @return
     */
    LoginResult informationById(Integer userId);

    /***
     * 修改用户密码
     *
     * @param passwordDto
     */
    void updatePassword(UpdatePasswordDto passwordDto);

    /***
     * 发送找回密码验证码
     *
     * @param user
     */
    void sendRetrievePassword(UserDto user);

    /***
     * 找回密码
     *
     * @param user
     */
    void retrievePassword(UserDto user);

    /***
     * 发布作品
     *
     * @param userId
     */
    void pushPost(int userId);

    /***
     * 保存用户首页逻辑
     *
     * @param apertureSet
     */
    void apertureSetting(UserApertureSet apertureSet);


    /**
     * 通过名称搜索摄影师或模特
     * @param commonDto 条件参数
     * @return {@link List<Map<String, Object>>}
     */
    List<Map<String, Object>> searchByName(CommonDto commonDto);
}
